-
Notifications
You must be signed in to change notification settings - Fork 234
RFC: Add basic support for local and remote CAN #1719
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: stable-25.0
Are you sure you want to change the base?
Conversation
|
Hi @stoupa-cz Thanks for working on this. I've been experimenting with |
Hi @hundeboll , Thanks a lot for the information. This is a clever way. We are using the cannelloni. Root privileges are manageable on exporters; however, handling them on clients (e.g., developers' computers) is cumbersome. I'm currently trying a helper like labgrid-raw-interface. I will push it when ready. Anyway, as pointed out in #1289, we may support both backends (you can see that issue for more information about SW selection). BTW, is your experiment available anywhere? |
I see. I think the Just like you've done, my plan was to create a resource similar to SerialPortExport, which would start The driver could then connect to the resource similar to SerialDriver. Or do regular
It still resides in our internal repository, but I've attached it here. It uses SSH forward to talk with |
|
Hi @stoupa-cz I tried running an exporter with your PR, where a It works quite well for our purpose. One thing I miss from And again: It might make sense to remove the interface configuration, and leave that to e.g. |
The helper focuses on the CAN interface. All actions (except `add`) may be run only on interfaces of type CAN. It is heavily inspired by `labgrid-raw-interface`. Two subcommands are currently supported. The `ip` subcommand manages the interface, while the `tc` subcommand throttles the interface according to the Cannelloni documentation. TODO: documentation Signed-off-by: Tomas Novotny <tomas@novotny.cz>
The CAN devices are matched in the network interfaces. The CAN device is not a typical network interface, so filter it. A new resource, CANPort, will be introduced to cover the CAN devices. Signed-off-by: Tomas Novotny <tomas@novotny.cz>
Add a simple CAN resource. It may be used to determine the interface name by udev matching. Signed-off-by: Tomas Novotny <tomas@novotny.cz>
Add an exporter part for the remotely accessible CAN. As discussed, the cannelloni is used as the underlying tunnel. According to the cannelloni documentation, it should be used only in environments where packet loss is tolerable. There is no guarantee that CAN frames will reach their destination at all and/or in the right order. Signed-off-by: Tomas Novotny <tomas@novotny.cz>
The driver can connect to both local and remote CAN ports. For local ports, it sets up the interface. The driver is also helpful for identifying the interface name using udev. For remote ports, it creates a local vcan interface and establishes a connection to the exported resource through cannelloni. According to the cannelloni documentation, the speed of the network interface is limited by tc to prevent packet losses. XXX: See the code (a few things to fix). Signed-off-by: Tomas Novotny <tomas@novotny.cz>
a4f3ee0 to
fd745c8
Compare
It seems we have different needs. For us, a client-side "real" BTW, what is your use case? Do you want to replay some traffic?
On exporter side, the interface is controlled (e.g., down, set-bitrate, up) when the place is acquired. The bitrate configuration comes from the expoter configuration. It is similar on client when the driver is activated, although the bitrate is loaded from the exporter's configuration. Which interface configuration managed by |
Description
This is a draft of basic CAN support. It is in RFC, as there are open questions, missing docs and tests, and moreover, it needs more testing.
We plan to use it to remotely access the satellite's telemetry buses during development.It is tested on our local branch to remotely access the satellite's telemetry buses during development.Local and remote CAN resources are added. Additionally, a simple CAN driver is added. The driver has very limited capabilities. For local use, it can set up the interface and tell you the interface name. For remote use, it establishes a transparent tunnel using cannelloni. With it, you can use the local virtual CAN interface. All the traffic is routed to the real interface on the other end.
Be aware, as cannelloni states in its doc:
I tested in the lab only. We will test it in production during September/October.Draft version (without
labgrid-can-interface) is being tested in production for ~two months.I see the main blocker: it requires root privileges on both sides (exporter and client; even for local use). What is the preferred way to handle privileged access? May we useHelperlabgrid-raw-interface?labgrid-can-interfacehas been added.Checklist
Reference issues: #1287 and #1289
This is a part of my work at VZLU AEROSPACE.